class Watcher {
  constructor(vm, key, cb){
    //当前vm实例
    this.vm = vm
    //订阅的属性名
    this.key = key
    //数据变化后，执行回调
    this.cb = cb

    //触发Getter前，将当前订阅者实例存储给Dep
    Dep.target = this
    //记录属性更改之前的值,用于记录更新后状态检测
    this.oldValue = vm[key]
    //操作完毕后清除target,用于存储下一个实例
    Dep.target = null
  }
  //封装数据变化时更新视图的功能
  update(){
    const newValue = this.vm[this.key]
    //数据不变无需更新
    if(newValue===this.oldValue) return
    //数据改变，调用回调
    this.cb(newValue)
  }
}